#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
char* getcgidata(FILE* fp, char* requestmethod);  
int main()  
{  
        char *input;  
        char *req_method;  
        char name[64];  
        char pass[64];  
        int i = 0;  
        int j = 0;  
        
        printf("Content-type: text/html\n\n");  
        printf("The following is query reuslt:<br><br>");  
        req_method = getenv("REQUEST_METHOD");  
        input = getcgidata(stdin, req_method);
       
        // 前面9个字符是UserName=  
        // 在"UserName="和"&"之间的是我们要取出来的用户名  
        for ( i = 9; i < (int)strlen(input); i++ )  
        {  
            if ( input[i] == '&' )  
            {  
                name[j] = '\0';  
                break;  
            }                    
            name[j++] = input[i];  
        }  
        // 前面9个字符 + "&Password="10个字符 + Username的字符数  
        // 是我们不要的，故省略掉，不拷贝  
        for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )  
        {  
            pass[j++] = input[i];  
        }  
        pass[j] = '\0';  
        printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);  
        
        return 0;  
}  
char* getcgidata(FILE* fp, char* requestmethod)  
{  
        char* input;  
        int len;  
        int size = 1024;  
        int i = 0;  
        
       if (!strcmp(requestmethod, "GET"))  
       {  
            input = getenv("QUERY_STRING");  
            return input;  
       }  
       else if (!strcmp(requestmethod, "POST"))  
       {  
            len = atoi(getenv("CONTENT_LENGTH"));  
            input = (char*)malloc(sizeof(char)*(size + 1));  
            
            if (len == 0)  
            {  
                input[0] = '\0';  
                return input;  
            }  
            
            while(1)  
            {  
                input[i] = (char)fgetc(fp);  
                if (i == size)  
                {  
                    input[i+1] = '\0';  
                    return input;  
                }  
                
                --len;  
                if (feof(fp) || (!(len)))  
                {  
                    i++;  
                    input[i] = '\0';  
                    return input;  
                }  
                i++;                    
            }  
       }  
        return NULL;  
}